// async  await  是generator的语法糖 v8内核 C/C++ 快

// async function fn() {  // 加上async 这个函数发生什么
//   await // promise
//
// }
/**
 * 使用generator的时候 返回generator的迭代器
 * @returns {IterableIterator<*>}  遥控器
 */

//
//    模拟一个后台  三个接口
//    /login  access_token
//    /list  ?access_token =1
//    {code:1}
//    /item?code
//
//    三个请求  第一个请求返回 第二个请求需要的参数
//    第二个请求 返回第三个请求需要的参数



function getAsyncResult() {
  return new Promise(resolve => {
      setTimeout(() => {
        resolve('你好啊,宝贝');
      }, 0)
    }
  );
}

function getAsyncResult2() {
  return new Promise(resolve => {
      setTimeout(() => {
        resolve('你也好啊,大宝贝');
      }, 0)
    }
  );
}

// 简易版的co模块
function run(generator) {
  // 逻辑
  // 结合 next  结合 done
  // 递归
  let gen = generator();
  function next(data) {
    let result = gen.next(data);// result {done ,value}
    if (result.done) return result.value;
    if (result.value instanceof Promise) {
      result.value.then((res) => {
        console.log(res);
        next(res)
      })
    } else {
      throw new TypeError('params after yield must be instanceof Promise');
    }
  }

  next();
}
//
// function* fn() { // 飞机
//   let res1 = yield getAsyncResult();
//   let res2 = yield getAsyncResult2();
//
//   console.log(res1, '---------------华丽丽的分隔符res1--------------');
//   console.log(res2, '---------------华丽丽的分隔符res2--------------');
//   //
// }

// let gen = fn();
// 执行下一个yield

// run(fn);
//
// gen.next().value.then(res => {
//   console.log(res);
//   gen.next().value.then(res1=>{
//     console.log(res1);
//   })
// });


